"""
Redis事务
基本语法
    MULTI
        开启事务, 后续的命令会被加入到同一个事务中
        事务中的操作会发给服务端, 但是不会立即执行, 而是放到了该事务的对应的一个队列中, 服务端返回QUEUED
    EXEC
        执行EXEC后, 事务中的命令才会被执行
        事务中的命令出现错误时, 不会回滚也不会停止事务, 而是继续执行
    DISCARD
        取消事务, 事务队列会清空, 客户端退出事务状态

ACID
    原子性
        不支持
        不会回滚并且继续执行
    隔离性
        支持
        事务中命令顺序执行, 并且不会被其他客户端打断 (先EXEC的先执行)
        单机redis读写操作使用 单进程单线程
    持久性
        支持, 但相比Mysql, redis数据易丢失
    一致性
        不支持

注意点:
    创建管道后, 默认会开启事务
    放入事务中的命令在执行 execute方法后才会执行
"""
from redis import StrictRedis

# 创建redis客户端
redis_client = StrictRedis()

# 创建管道对象  默认会开启事务
pipe = redis_client.pipeline()

# pipe的后续操作会被放入事务中  不会立即执行
a = pipe.set('name', 'zhangsan')
b = pipe.get('name')

# 提交事务   提交才会执行事务中的命令
c = pipe.execute()

print(a)
print(b)
print(c)
